Magnetic tape is a commonly used storage medium in processing systems. It is used particularly for relatively long-term storage of bulk data. For example, tape is commonly used to store back-up copies of computer operating systems, or customer billing data of telephone offices. Such data is non-transitory and hence is commonly stored on the tape for long periods of time, i.e., days, months, or years. During such long periods of use and handling, it is not unusual for the tape to get damaged. The damage may result in the mutilation of the stored data, causing errors that cannot be corrected by error correction techniques that are commonly employed to detect and correct minor errors in data items. Examples of such error correction techniques are parity bits, cyclic redundancy code (CRC), and Hamming error correction code. Such codes are appended to each data item, for example to each data byte. They are generally useful for detection of even multibit errors in the data item, but seldom allow for more than single or double bit error correction in such item. But damage to tape such as a scratch, a crinkle, a tear, or a smudge of dirt is likely to mutilate more than one data item and more than one or two bits of each of those items, and hence causes uncorrectable errors.
Techniques exist for detecting and avoiding tape blemishes that are present at the time that data is being stored on the tape. These techniques generally do not write on those portions of the tape that are detected to be blemished. These techniques skip over the blemished areas and store all data on those portions of tape that are detected to be good. Such techniques, however, offer no solution to the problem of how to deal with blemishes--and their consequences--that appear only after data has been stored on the tape.
For purposes of data storage on tape, data is commonly grouped into blocks of data items. A block may comprise, for example, a thousand bytes of data. Individual data blocks are delineated on tape, for example by being separated by headers and trailers or by blank portions of tape. When a portion of a data block develops an uncorrectable error, it is a common practice to treat the whole block as being mutilated and hence to consider all of its information content to be lost. In response to a request for retrieval of such a data block, the retrieval mechanism commonly returns no data, only a message indicating that the block is bad.
In many applications, such as telephone billing data storage, this approach results in the loss of a whole block of information that cannot easily be obtained from any other source. Hence, it is desirable to be able to recover as much of the good data from the mutilated data block as possible. But the current common practice does not satisfy this need.
Furthermore, current implementations of the retrieval mechanism are not suited for satisfying this need. Having begun to retrieve a block, the retrieval mechanism detects where valid data ends and mutilated data begins, but thereafter the mechanism has no means of detecting where mutilated data ends and valid data begins. Only when it encounters the end of the block does the mechanism regain the ability to distinguish valid from mutilated data.